接下來幾天讓我們挑戰看看leetcode的一些基本題目吧!不過在這之前讓我們來先介紹一下演算法與時間複雜度。
根據維基百科:
演算法(algorithm),在數學(算學)和電腦科學之中,為任何良定義的具體計算步驟的一個序列,常用於計算、資料處理和自動推理。精確而言,演算法是一個表示爲有限長,列表的有效方法。演算法應包含清晰定義的指令,用於計算函式。
相信看完上面那段應該還是不太了解什麼是演算法,讓我們來簡化一下:
演算法是一個有輸入跟輸出,且具有明確和有限能夠解決問題的步驟。
再用簡單用一句話來形容就是:
輸入一個東西,想要得到另外一個東西,經過的過程就是所謂的演算法。
讓我們用「炒菜」來解釋解釋,炒一盤青菜可能會需要這些步驟:
我們把食材丟下去,透過清楚明確的有限步驟,我們能得出一盤青菜。
在認識了演算法基本的定義後,就讓我們進一步來認識什麼是時間複雜度?
我們遇到同一個問題,解決的方法可能會有很多種,那怎麼評斷方法的好壞?這個時候就需要指標。評斷指標有兩個:
今天我們來介紹時間複雜度,那時間複雜度通常用大 O 符號(Big O notation)來記錄時間複雜度的快慢。
讓我們直接來看範例:
function plus(num){
return num + 2;
}
上面的範例來說演算法執行的步驟是固定的,無關輸入的值而改變,那我們會記成 O(1)。
範例2:
for(var i = 0; i < n; i++){
console.log(i);
}
範例2,可以發現for迴圈指行的次數會隨著n的值而改變,所以會記成 O(n)。
範例3:
for(var i = 0; i < n; i++){
for(var j = 0; j < n-1; j++){
console.log(i * j)
}
}
範例3跑了 n×(n−1)=n2−n 次,但還是會記做 O(n^2) ,只取最高次方。
除了上面三個範例外還有其他的時間複雜度:
補充:
以上是今天對於基本演算法與時間複雜度介紹,明天讓我回來介紹Array的各種方法吧!